package com.hsc.mvc.config;

import com.hsc.mvc.Configuration;
import com.hsc.mvc.exceptions.ConfigFileNotFoundException;

import java.io.InputStream;

/**
 * @author
 * @date 2025-05-18
 * @Description 基于ClasspathXML配置文件进行读取 策略模式中的策略类。ConfigReader 规定了读取配置文件的方法
 */
public class ClasspathXMLReader extends AbstractXMLReader implements ConfigReader{
    /**
     * 必须重写AbstractXMLReader构造方法 对AbstractReader 构造器进行调用
     * 然后存储 configuration
     *
     * @param configuration
     */
    public ClasspathXMLReader(Configuration configuration) {
        super(configuration);
    }

    /**
     * 解析xml文件
     * 获取对应的InputStream 流
     * 然后
     * @param configLocation
     */
    @Override
    public void read(String configLocation) {
        // 解析路径的xml文件
        // 使用类加载器来加载
        // 替换classpath:mvc.xml 为 mvc.xml
        String path = configLocation.replace("classpath:","");
        try {
            // 使用类加载器来加载
            // 如果文件不存在 会抛出空指针异常
            InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(path);
            // 使用父类的方法 读取xml文件
            super.read(inputStream);
        }catch (NullPointerException e){
            //classpath下的配置文件路径不存在
            throw new ConfigFileNotFoundException(path);
        }

    }
}
